<?php
/**
 * Created by PhpStorm.
 * User: Shen
 * Date: 2016/7/18
 * Time: 22:03
 */
namespace DuiCode;


/**
//SPL常用数据结构的使用

//栈  先进后出
$stack = new SplStack();
$stack->push("打他");  //入栈
$stack->pop();   //出栈


//队列 先进先出

$queue = new SplQueue();
$queue->enqueue("揍他");  //入队列
$queue->dequeue();   //出队列


//堆

//最小堆
$heap = new SplMinHeap();

$heap->insert("夯他");  //插入
$heap->extract();    //提取


//固定长度的数组

$array = new SplFixedArray(10);

$array[0] = 123;
$array[9] = 1234;
**/

/**
PHP魔术方法大致分成四类：
1、__set/__get，修改对象不存在的属性和获取对象不存在的属性；
2、__toString()；将一个对象当成一个字符串打印的时候调用；
3、__call/__callStatic：调用一个不存在的方法或者一个不存在的静态方法的时候调用；
4、__invoke，将对象当成函数调用的时候该魔术方法被调
**/


/**
 *适配器模式：将截然不同的函数接口封装成统一的API
 * 举例：mysql,mysqli,pdo三种数据库操作可以用适配器模式统一成一致，还有将 memcache、redis、file、apc等不同的缓存函数，统一成一致
 */
interface IDatabase{
    function connect($host, $user, $passwd, $dbname);
    function query($sql);
    function close();
}



//PHP中链式操作的实现
class Database{

    protected $db;

    /**单例模式**/
    //构造方法私有化
    private function __construct(){

    }

    //获取实例
    static function getInstance(){
       if (self::$db){
           return self::$db;
       }else {
           self::$db = new self();
           return self::$db;
       }
    }

    function where($where){
        //这一句就是为了实现链式操作
        return $this;
    }

    function order($order){

        return $this;
    }

    function limit($limit){

        return $this;
    }
}





